<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<head>
    <title>Penlight Documentation</title>
    <link rel="stylesheet" href="ldoc_fixed.css" type="text/css" />
</head>
<body>

<div id="container">

<div id="product">
	<div id="product_logo"></div>
	<div id="product_name"><big><b></b></big></div>
	<div id="product_description"></div>
</div> <!-- id="product" -->


<div id="main">


<!-- Menu -->

<div id="navigation">
<br/>
<h1>Penlight</h1>

<ul>
  <li><a href="https://github.com/lunarmodules/Penlight">GitHub Project</a></li>
  <li><a href="index.html">Documentation</a></li>
</ul>



<h2>Libraries</h2>
<ul class="nowrap">
  <li><a href="libraries/pl.html">pl</a></li>
  <li><a href="libraries/pl.app.html">pl.app</a></li>
  <li><a href="libraries/pl.array2d.html">pl.array2d</a></li>
  <li><a href="libraries/pl.class.html">pl.class</a></li>
  <li><a href="libraries/pl.compat.html">pl.compat</a></li>
  <li><a href="libraries/pl.comprehension.html">pl.comprehension</a></li>
  <li><a href="libraries/pl.config.html">pl.config</a></li>
  <li><a href="libraries/pl.data.html">pl.data</a></li>
  <li><a href="libraries/pl.dir.html">pl.dir</a></li>
  <li><a href="libraries/pl.file.html">pl.file</a></li>
  <li><a href="libraries/pl.func.html">pl.func</a></li>
  <li><a href="libraries/pl.import_into.html">pl.import_into</a></li>
  <li><a href="libraries/pl.input.html">pl.input</a></li>
  <li><a href="libraries/pl.lapp.html">pl.lapp</a></li>
  <li><a href="libraries/pl.lexer.html">pl.lexer</a></li>
  <li><a href="libraries/pl.luabalanced.html">pl.luabalanced</a></li>
  <li><a href="libraries/pl.operator.html">pl.operator</a></li>
  <li><a href="libraries/pl.path.html">pl.path</a></li>
  <li><a href="libraries/pl.permute.html">pl.permute</a></li>
  <li><a href="libraries/pl.pretty.html">pl.pretty</a></li>
  <li><a href="libraries/pl.seq.html">pl.seq</a></li>
  <li><a href="libraries/pl.sip.html">pl.sip</a></li>
  <li><a href="libraries/pl.strict.html">pl.strict</a></li>
  <li><a href="libraries/pl.stringio.html">pl.stringio</a></li>
  <li><a href="libraries/pl.stringx.html">pl.stringx</a></li>
  <li><a href="libraries/pl.tablex.html">pl.tablex</a></li>
  <li><a href="libraries/pl.template.html">pl.template</a></li>
  <li><a href="libraries/pl.test.html">pl.test</a></li>
  <li><a href="libraries/pl.text.html">pl.text</a></li>
  <li><a href="libraries/pl.types.html">pl.types</a></li>
  <li><a href="libraries/pl.url.html">pl.url</a></li>
  <li><a href="libraries/pl.utils.html">pl.utils</a></li>
  <li><a href="libraries/pl.xml.html">pl.xml</a></li>
</ul>
<h2>Classes</h2>
<ul class="nowrap">
  <li><a href="classes/pl.Date.html">pl.Date</a></li>
  <li><a href="classes/pl.List.html">pl.List</a></li>
  <li><a href="classes/pl.Map.html">pl.Map</a></li>
  <li><a href="classes/pl.MultiMap.html">pl.MultiMap</a></li>
  <li><a href="classes/pl.OrderedMap.html">pl.OrderedMap</a></li>
  <li><a href="classes/pl.Set.html">pl.Set</a></li>
</ul>
<h2>Manual</h2>
<ul class="nowrap">
  <li><a href="manual/01-introduction.md.html">Introduction</a></li>
  <li><a href="manual/02-arrays.md.html">Tables and Arrays</a></li>
  <li><a href="manual/03-strings.md.html">Strings. Higher-level operations on strings.</a></li>
  <li><a href="manual/04-paths.md.html">Paths and Directories</a></li>
  <li><a href="manual/05-dates.md.html">Date and Time</a></li>
  <li><a href="manual/06-data.md.html">Data</a></li>
  <li><a href="manual/07-functional.md.html">Functional Programming</a></li>
  <li><a href="manual/08-additional.md.html">Additional Libraries</a></li>
  <li><a href="manual/09-discussion.md.html">Technical Choices</a></li>
</ul>
<h2>Examples</h2>
<ul class="nowrap">
  <li><a href="examples/seesubst.lua.html">seesubst.lua</a></li>
  <li><a href="examples/sipscan.lua.html">sipscan.lua</a></li>
  <li><a href="examples/symbols.lua.html">symbols.lua</a></li>
  <li><a href="examples/test-cmp.lua.html">test-cmp.lua</a></li>
  <li><a href="examples/test-data.lua.html">test-data.lua</a></li>
  <li><a href="examples/test-listcallbacks.lua.html">test-listcallbacks.lua</a></li>
  <li><a href="examples/test-pretty.lua.html">test-pretty.lua</a></li>
  <li><a href="examples/test-symbols.lua.html">test-symbols.lua</a></li>
  <li><a href="examples/testclone.lua.html">testclone.lua</a></li>
  <li><a href="examples/testconfig.lua.html">testconfig.lua</a></li>
  <li><a href="examples/testglobal.lua.html">testglobal.lua</a></li>
  <li><a href="examples/testinputfields.lua.html">testinputfields.lua</a></li>
  <li><a href="examples/testinputfields2.lua.html">testinputfields2.lua</a></li>
  <li><a href="examples/testxml.lua.html">testxml.lua</a></li>
  <li><a href="examples/which.lua.html">which.lua</a></li>
</ul>

</div>

<div id="content">


  <h2>Penlight Lua Libraries 1.11.0</h2>
  <p>Penlight is a set of pure Lua libraries for making it easier to work with common tasks like iterating over directories, reading configuration files and the like. Provides functional operations on tables and sequences. Visit the <a href="https://github.com/lunarmodules/Penlight">GitHub project</a> to review the code or file issues. Skip to the <a href="manual/01-introduction.md.html#">introduction</a>.</p>

<h2>Libraries</h2>
<table class="module_list">
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.html">pl</a></td>
		<td class="summary">Entry point for loading all PL libraries only on demand, into the global space.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.app.html">pl.app</a></td>
		<td class="summary">Application support functions.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.array2d.html">pl.array2d</a></td>
		<td class="summary">Operations on two-dimensional arrays.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.class.html">pl.class</a></td>
		<td class="summary">Provides a reuseable and convenient framework for creating classes in Lua.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.compat.html">pl.compat</a></td>
		<td class="summary">Lua 5.1/5.2/5.3 compatibility.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.comprehension.html">pl.comprehension</a></td>
		<td class="summary">List comprehensions implemented in Lua.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.config.html">pl.config</a></td>
		<td class="summary">Reads configuration files into a Lua table.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.data.html">pl.data</a></td>
		<td class="summary">Reading and querying simple tabular data.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.dir.html">pl.dir</a></td>
		<td class="summary">Listing files in directories and creating/removing directory paths.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.file.html">pl.file</a></td>
		<td class="summary">File manipulation functions: reading, writing, moving and copying.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.func.html">pl.func</a></td>
		<td class="summary">Functional helpers like composition, binding and placeholder expressions.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.import_into.html">pl.import_into</a></td>
		<td class="summary">PL loader, for loading all PL libraries, only on demand.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.input.html">pl.input</a></td>
		<td class="summary">Iterators for extracting words or numbers from an input source.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.lapp.html">pl.lapp</a></td>
		<td class="summary">Simple command-line parsing using human-readable specification.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.lexer.html">pl.lexer</a></td>
		<td class="summary">Lexical scanner for creating a sequence of tokens from text.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.luabalanced.html">pl.luabalanced</a></td>
		<td class="summary">Extract delimited Lua sequences from strings.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.operator.html">pl.operator</a></td>
		<td class="summary">Lua operators available as functions.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.path.html">pl.path</a></td>
		<td class="summary">Path manipulation and file queries.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.permute.html">pl.permute</a></td>
		<td class="summary">Permutation operations.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.pretty.html">pl.pretty</a></td>
		<td class="summary">Pretty-printing Lua tables.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.seq.html">pl.seq</a></td>
		<td class="summary">Manipulating iterators as sequences.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.sip.html">pl.sip</a></td>
		<td class="summary">Simple Input Patterns (SIP).</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.strict.html">pl.strict</a></td>
		<td class="summary">Checks uses of undeclared global variables.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.stringio.html">pl.stringio</a></td>
		<td class="summary">Reading and writing strings using file-like objects.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.stringx.html">pl.stringx</a></td>
		<td class="summary">Python-style extended string library.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.tablex.html">pl.tablex</a></td>
		<td class="summary">Extended operations on Lua tables.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.template.html">pl.template</a></td>
		<td class="summary">A template preprocessor.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.test.html">pl.test</a></td>
		<td class="summary">Useful test utilities.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.text.html">pl.text</a></td>
		<td class="summary">Text processing utilities.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.types.html">pl.types</a></td>
		<td class="summary">Dealing with Detailed Type Information</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.url.html">pl.url</a></td>
		<td class="summary">Python-style URL quoting library.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.utils.html">pl.utils</a></td>
		<td class="summary">Generally useful routines.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="libraries/pl.xml.html">pl.xml</a></td>
		<td class="summary">XML LOM Utilities.</td>
	</tr>
</table>
<h2>Classes</h2>
<table class="module_list">
	<tr>
		<td class="name"  nowrap><a href="classes/pl.Date.html">pl.Date</a></td>
		<td class="summary">Date and Date Format classes.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="classes/pl.List.html">pl.List</a></td>
		<td class="summary">Python-style list class.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="classes/pl.Map.html">pl.Map</a></td>
		<td class="summary">A Map class.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="classes/pl.MultiMap.html">pl.MultiMap</a></td>
		<td class="summary">MultiMap, a Map which has multiple values per key.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="classes/pl.OrderedMap.html">pl.OrderedMap</a></td>
		<td class="summary">OrderedMap, a map which preserves ordering.</td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="classes/pl.Set.html">pl.Set</a></td>
		<td class="summary">A Set class.</td>
	</tr>
</table>
<h2>Manual</h2>
<table class="module_list">
	<tr>
		<td class="name"  nowrap><a href="manual/01-introduction.md.html">01-introduction.md</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="manual/02-arrays.md.html">02-arrays.md</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="manual/03-strings.md.html">03-strings.md</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="manual/04-paths.md.html">04-paths.md</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="manual/05-dates.md.html">05-dates.md</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="manual/06-data.md.html">06-data.md</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="manual/07-functional.md.html">07-functional.md</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="manual/08-additional.md.html">08-additional.md</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="manual/09-discussion.md.html">09-discussion.md</a></td>
		<td class="summary"></td>
	</tr>
</table>
<h2>Examples</h2>
<table class="module_list">
	<tr>
		<td class="name"  nowrap><a href="examples/seesubst.lua.html">seesubst.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/sipscan.lua.html">sipscan.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/symbols.lua.html">symbols.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/test-cmp.lua.html">test-cmp.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/test-data.lua.html">test-data.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/test-listcallbacks.lua.html">test-listcallbacks.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/test-pretty.lua.html">test-pretty.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/test-symbols.lua.html">test-symbols.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/testclone.lua.html">testclone.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/testconfig.lua.html">testconfig.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/testglobal.lua.html">testglobal.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/testinputfields.lua.html">testinputfields.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/testinputfields2.lua.html">testinputfields2.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/testxml.lua.html">testxml.lua</a></td>
		<td class="summary"></td>
	</tr>
	<tr>
		<td class="name"  nowrap><a href="examples/which.lua.html">which.lua</a></td>
		<td class="summary"></td>
	</tr>
</table>

</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
</html>
